<html>
<head><meta charset="utf-8"><title>design meeting 2019.12.16 · wg-traits · Zulip Chat Archive</title></head>
<h2>Stream: <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/index.html">wg-traits</a></h2>
<h3>Topic: <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/design.20meeting.202019.2E12.2E16.html">design meeting 2019.12.16</a></h3>

<hr>

<base href="https://rust-lang.zulipchat.com">

<head><link href="https://rust-lang.github.io/zulip_archive/style.css" rel="stylesheet"></head>

<a name="183576530"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/design%20meeting%202019.12.16/near/183576530" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> Jack Huey <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/design.20meeting.202019.2E12.2E16.html#183576530">(Dec 16 2019 at 18:31)</a>:</h4>
<p>Hey <span class="user-group-mention" data-user-group-id="692">@WG-traits</span>, I think we'll mostly talk associated types and normalization. I've been working on putting down some thoughts on the Hackmd <a href="https://hackmd.io/nQyCMpIvTQe5DsC90qFSKg" target="_blank" title="https://hackmd.io/nQyCMpIvTQe5DsC90qFSKg">doc</a>. I might add a few more things before the meeting starts, but feel free to add your thoughts :)</p>



<a name="183576648"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/design%20meeting%202019.12.16/near/183576648" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> Jack Huey <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/design.20meeting.202019.2E12.2E16.html#183576648">(Dec 16 2019 at 18:33)</a>:</h4>
<p>Additionally, <span class="user-mention" data-user-id="116009">@nikomatsakis</span> if it's okay with you, I would like to spend 5 minutes at the start to talk about the Chalk book and what plans are for that. And 5 or so minutes to talk about the coinduction branch and what is left to push that through</p>



<a name="183578957"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/design%20meeting%202019.12.16/near/183578957" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/design.20meeting.202019.2E12.2E16.html#183578957">(Dec 16 2019 at 18:59)</a>:</h4>
<p><span class="user-mention" data-user-id="232957">@Jack Huey</span> yeah, that seems fine</p>



<a name="183578976"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/design%20meeting%202019.12.16/near/183578976" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/design.20meeting.202019.2E12.2E16.html#183578976">(Dec 16 2019 at 18:59)</a>:</h4>
<p>Hey <span class="user-group-mention" data-user-group-id="692">@WG-traits</span>, design meeting starting now-ish!</p>



<a name="183579116"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/design%20meeting%202019.12.16/near/183579116" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/design.20meeting.202019.2E12.2E16.html#183579116">(Dec 16 2019 at 19:00)</a>:</h4>
<p>So, we had planned to talk about "lazy normalization strategies" today, but <span class="user-mention" data-user-id="232957">@Jack Huey</span> was mentioning that we could also discuss the Chalk Book (and perhaps a bit about coinduction, although I think maybe detailed discussion of that should wait)</p>



<a name="183579149"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/design%20meeting%202019.12.16/near/183579149" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/design.20meeting.202019.2E12.2E16.html#183579149">(Dec 16 2019 at 19:00)</a>:</h4>
<p>I have also been thinking more about "overall roadmap" and wanted to maybe discuss <em>that</em> a bit, though it fits I think into the chalk book</p>



<a name="183579198"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/design%20meeting%202019.12.16/near/183579198" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> Jack Huey <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/design.20meeting.202019.2E12.2E16.html#183579198">(Dec 16 2019 at 19:01)</a>:</h4>
<p>I just wanted to quickly go over chalk book, just because I think it would be good to have some definite ideas of what we're putting in it</p>



<a name="183579214"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/design%20meeting%202019.12.16/near/183579214" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> Jack Huey <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/design.20meeting.202019.2E12.2E16.html#183579214">(Dec 16 2019 at 19:01)</a>:</h4>
<p>Considering it would be helpful for others :)</p>



<a name="183579229"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/design%20meeting%202019.12.16/near/183579229" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/design.20meeting.202019.2E12.2E16.html#183579229">(Dec 16 2019 at 19:01)</a>:</h4>
<p>Yeah. I was thinking about it this weekend</p>



<a name="183579267"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/design%20meeting%202019.12.16/near/183579267" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/design.20meeting.202019.2E12.2E16.html#183579267">(Dec 16 2019 at 19:02)</a>:</h4>
<p>in part because I was looking into how to document the plans around types and chalk-ir</p>



<a name="183579288"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/design%20meeting%202019.12.16/near/183579288" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> Jack Huey <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/design.20meeting.202019.2E12.2E16.html#183579288">(Dec 16 2019 at 19:02)</a>:</h4>
<p>Coinduction doesn't necessarily need a discussion now. We can talk elsewhere</p>



<a name="183579289"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/design%20meeting%202019.12.16/near/183579289" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/design.20meeting.202019.2E12.2E16.html#183579289">(Dec 16 2019 at 19:02)</a>:</h4>
<p>so, it seems like it should cover a few things</p>



<a name="183579290"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/design%20meeting%202019.12.16/near/183579290" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/design.20meeting.202019.2E12.2E16.html#183579290">(Dec 16 2019 at 19:02)</a>:</h4>
<ul>
<li>some tips for contribution etc</li>
</ul>



<a name="183579300"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/design%20meeting%202019.12.16/near/183579300" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/design.20meeting.202019.2E12.2E16.html#183579300">(Dec 16 2019 at 19:02)</a>:</h4>
<ul>
<li>understanding the big ideas behind chalk</li>
</ul>



<a name="183579315"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/design%20meeting%202019.12.16/near/183579315" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/design.20meeting.202019.2E12.2E16.html#183579315">(Dec 16 2019 at 19:02)</a>:</h4>
<ul>
<li>documenting <strong>and justifying</strong> the lowering rules</li>
</ul>



<a name="183579333"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/design%20meeting%202019.12.16/near/183579333" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/design.20meeting.202019.2E12.2E16.html#183579333">(Dec 16 2019 at 19:03)</a>:</h4>
<p>I think a lot of this content exists in the rustc-guide to some extent but should be moved here instead</p>



<a name="183579358"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/design%20meeting%202019.12.16/near/183579358" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/design.20meeting.202019.2E12.2E16.html#183579358">(Dec 16 2019 at 19:03)</a>:</h4>
<ul>
<li>documenting how the chalk-engine crate works etc</li>
</ul>



<a name="183579372"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/design%20meeting%202019.12.16/near/183579372" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/design.20meeting.202019.2E12.2E16.html#183579372">(Dec 16 2019 at 19:03)</a>:</h4>
<p>one thing I'm toying with is how to think about e.g. the roadmap</p>



<a name="183579448"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/design%20meeting%202019.12.16/near/183579448" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> Jack Huey <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/design.20meeting.202019.2E12.2E16.html#183579448">(Dec 16 2019 at 19:04)</a>:</h4>
<p>I'm assuming "big ideas" includes the distinction between the crates</p>



<a name="183579454"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/design%20meeting%202019.12.16/near/183579454" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/design.20meeting.202019.2E12.2E16.html#183579454">(Dec 16 2019 at 19:04)</a>:</h4>
<p>I'd like for next year to have some more concrete goals outlined etc, but I'm not sure if stuff like that belongs in the book, or maybe better represented as issues, GH projects, or other such things</p>



<a name="183579465"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/design%20meeting%202019.12.16/near/183579465" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/design.20meeting.202019.2E12.2E16.html#183579465">(Dec 16 2019 at 19:04)</a>:</h4>
<blockquote>
<p>I'm assuming "big ideas" includes the distinction between the crates</p>
</blockquote>
<p>in fact I started drafting such a chapter</p>



<a name="183579478"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/design%20meeting%202019.12.16/near/183579478" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/design.20meeting.202019.2E12.2E16.html#183579478">(Dec 16 2019 at 19:04)</a>:</h4>
<p>I could see it being pretty useful to start by trying to write a table of contents, actually</p>



<a name="183579509"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/design%20meeting%202019.12.16/near/183579509" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> detrumi <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/design.20meeting.202019.2E12.2E16.html#183579509">(Dec 16 2019 at 19:05)</a>:</h4>
<p>A roadmap should only be part of the book if we're fairly certain we're going to follow it</p>



<a name="183579524"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/design%20meeting%202019.12.16/near/183579524" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> Jack Huey <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/design.20meeting.202019.2E12.2E16.html#183579524">(Dec 16 2019 at 19:05)</a>:</h4>
<p>I agree. Having a table of contents would also be good if somebody wants to help</p>



<a name="183579601"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/design%20meeting%202019.12.16/near/183579601" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/design.20meeting.202019.2E12.2E16.html#183579601">(Dec 16 2019 at 19:06)</a>:</h4>
<blockquote>
<p>A roadmap should only be part of the book if we're fairly certain we're going to follow it</p>
</blockquote>
<p>agreed. :) I guess I would like to be certain :)</p>



<a name="183579612"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/design%20meeting%202019.12.16/near/183579612" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/design.20meeting.202019.2E12.2E16.html#183579612">(Dec 16 2019 at 19:06)</a>:</h4>
<p>I think though that the "milestones" prob dont' belong there</p>



<a name="183579616"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/design%20meeting%202019.12.16/near/183579616" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/design.20meeting.202019.2E12.2E16.html#183579616">(Dec 16 2019 at 19:06)</a>:</h4>
<p>but what might belong there</p>



<a name="183579620"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/design%20meeting%202019.12.16/near/183579620" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/design.20meeting.202019.2E12.2E16.html#183579620">(Dec 16 2019 at 19:06)</a>:</h4>
<p>is documenting the <em>end state we are shooting for</em></p>



<a name="183579641"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/design%20meeting%202019.12.16/near/183579641" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/design.20meeting.202019.2E12.2E16.html#183579641">(Dec 16 2019 at 19:06)</a>:</h4>
<p>e.g., I could see that we could try to sketch out what we think the types should look like</p>



<a name="183579642"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/design%20meeting%202019.12.16/near/183579642" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/design.20meeting.202019.2E12.2E16.html#183579642">(Dec 16 2019 at 19:06)</a>:</h4>
<p>and document that</p>



<a name="183579645"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/design%20meeting%202019.12.16/near/183579645" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/design.20meeting.202019.2E12.2E16.html#183579645">(Dec 16 2019 at 19:06)</a>:</h4>
<p>and then work towards it</p>



<a name="183579687"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/design%20meeting%202019.12.16/near/183579687" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> detrumi <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/design.20meeting.202019.2E12.2E16.html#183579687">(Dec 16 2019 at 19:07)</a>:</h4>
<p>Well, ideally there'd be some info on how to see the Chalk representation of an existing program (though of course that doesn't exist yet)</p>



<a name="183579703"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/design%20meeting%202019.12.16/near/183579703" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/design.20meeting.202019.2E12.2E16.html#183579703">(Dec 16 2019 at 19:07)</a>:</h4>
<p>I'm not 100% sure what that means</p>



<a name="183579708"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/design%20meeting%202019.12.16/near/183579708" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/design.20meeting.202019.2E12.2E16.html#183579708">(Dec 16 2019 at 19:07)</a>:</h4>
<p>but I think I agree ;)</p>



<a name="183579718"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/design%20meeting%202019.12.16/near/183579718" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/design.20meeting.202019.2E12.2E16.html#183579718">(Dec 16 2019 at 19:07)</a>:</h4>
<blockquote>
<p>e.g., I could see that we could try to sketch out what we think the types should look like</p>
</blockquote>
<p>let me clarify what I mean here</p>



<a name="183579722"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/design%20meeting%202019.12.16/near/183579722" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/design.20meeting.202019.2E12.2E16.html#183579722">(Dec 16 2019 at 19:08)</a>:</h4>
<p>I was imagining a diagram like</p>



<a name="183579765"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/design%20meeting%202019.12.16/near/183579765" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/design.20meeting.202019.2E12.2E16.html#183579765">(Dec 16 2019 at 19:08)</a>:</h4>
<p>hmm how to convey :)</p>



<a name="183579789"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/design%20meeting%202019.12.16/near/183579789" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/design.20meeting.202019.2E12.2E16.html#183579789">(Dec 16 2019 at 19:08)</a>:</h4>
<p>kind of two columns, where the left-hand side shows types like <code>TyData&lt;TF&gt;</code> and the right-hand side shows the <code>TypeFamily</code> associated types</p>



<a name="183579795"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/design%20meeting%202019.12.16/near/183579795" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/design.20meeting.202019.2E12.2E16.html#183579795">(Dec 16 2019 at 19:08)</a>:</h4>
<p>trying to show the connections between them</p>



<a name="183579805"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/design%20meeting%202019.12.16/near/183579805" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/design.20meeting.202019.2E12.2E16.html#183579805">(Dec 16 2019 at 19:09)</a>:</h4>
<p>to say "here is how chalk represents types, and these are the 'customization points' that can be used by a type family"</p>



<a name="183579816"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/design%20meeting%202019.12.16/near/183579816" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/design.20meeting.202019.2E12.2E16.html#183579816">(Dec 16 2019 at 19:09)</a>:</h4>
<p>and then talking a bit about how to map rustc types to that</p>



<a name="183579821"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/design%20meeting%202019.12.16/near/183579821" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/design.20meeting.202019.2E12.2E16.html#183579821">(Dec 16 2019 at 19:09)</a>:</h4>
<p>(in a subsection)</p>



<a name="183579829"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/design%20meeting%202019.12.16/near/183579829" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/design.20meeting.202019.2E12.2E16.html#183579829">(Dec 16 2019 at 19:09)</a>:</h4>
<p>this is effectively a "Design proposal" that we can take to the broader team</p>



<a name="183579833"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/design%20meeting%202019.12.16/near/183579833" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/design.20meeting.202019.2E12.2E16.html#183579833">(Dec 16 2019 at 19:09)</a>:</h4>
<p>and it also serves as the kind of documentation of what we are shooting for</p>



<a name="183579946"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/design%20meeting%202019.12.16/near/183579946" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/design.20meeting.202019.2E12.2E16.html#183579946">(Dec 16 2019 at 19:10)</a>:</h4>
<p>Anyway, so as not to use the whole meeting on this,</p>



<a name="183579962"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/design%20meeting%202019.12.16/near/183579962" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/design.20meeting.202019.2E12.2E16.html#183579962">(Dec 16 2019 at 19:11)</a>:</h4>
<p>maybe we should say that a good goal is to create a hackmd and play with a table of contents there?</p>



<a name="183579970"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/design%20meeting%202019.12.16/near/183579970" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/design.20meeting.202019.2E12.2E16.html#183579970">(Dec 16 2019 at 19:11)</a>:</h4>
<p>( and/or a PR )</p>



<a name="183579982"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/design%20meeting%202019.12.16/near/183579982" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/design.20meeting.202019.2E12.2E16.html#183579982">(Dec 16 2019 at 19:11)</a>:</h4>
<p>I gotta figure out a good way to organize all these documents...</p>



<a name="183579999"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/design%20meeting%202019.12.16/near/183579999" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/design.20meeting.202019.2E12.2E16.html#183579999">(Dec 16 2019 at 19:11)</a>:</h4>
<p><a href="https://hackmd.io/fd7oOHpoTtCGoCmd00UKYQ" target="_blank" title="https://hackmd.io/fd7oOHpoTtCGoCmd00UKYQ">chalk-book table of contents draft hackmd</a></p>



<a name="183580001"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/design%20meeting%202019.12.16/near/183580001" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> Jack Huey <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/design.20meeting.202019.2E12.2E16.html#183580001">(Dec 16 2019 at 19:11)</a>:</h4>
<p>sorry, distracted for a bit</p>



<a name="183580321"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/design%20meeting%202019.12.16/near/183580321" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> Jack Huey <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/design.20meeting.202019.2E12.2E16.html#183580321">(Dec 16 2019 at 19:15)</a>:</h4>
<p>so normalization and associated types?</p>



<a name="183580381"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/design%20meeting%202019.12.16/near/183580381" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/design.20meeting.202019.2E12.2E16.html#183580381">(Dec 16 2019 at 19:16)</a>:</h4>
<p>yep, sorry, I was updating the hackmd above a bit :)</p>



<a name="183580414"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/design%20meeting%202019.12.16/near/183580414" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/design.20meeting.202019.2E12.2E16.html#183580414">(Dec 16 2019 at 19:16)</a>:</h4>
<p>So...where exactly to start :)</p>



<a name="183580435"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/design%20meeting%202019.12.16/near/183580435" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/design.20meeting.202019.2E12.2E16.html#183580435">(Dec 16 2019 at 19:16)</a>:</h4>
<p>Maybe sketch out what we do now and what some of the problems with it are</p>



<a name="183580444"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/design%20meeting%202019.12.16/near/183580444" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/design.20meeting.202019.2E12.2E16.html#183580444">(Dec 16 2019 at 19:17)</a>:</h4>
<p>Not sure if everybody is familiar who's attending?</p>



<a name="183580456"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/design%20meeting%202019.12.16/near/183580456" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/design.20meeting.202019.2E12.2E16.html#183580456">(Dec 16 2019 at 19:17)</a>:</h4>
<p>(ps, cc <span class="user-mention" data-user-id="198819">@David Barsky</span> if you're around)</p>



<a name="183580559"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/design%20meeting%202019.12.16/near/183580559" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/design.20meeting.202019.2E12.2E16.html#183580559">(Dec 16 2019 at 19:18)</a>:</h4>
<p>In short, we have these two goals, <code>ProjectionEq</code> and <code>Normalize</code></p>



<a name="183580571"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/design%20meeting%202019.12.16/near/183580571" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/design.20meeting.202019.2E12.2E16.html#183580571">(Dec 16 2019 at 19:18)</a>:</h4>
<p>one of the questions that <span class="user-mention" data-user-id="232957">@Jack Huey</span> has raised is why there are two</p>



<a name="183580578"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/design%20meeting%202019.12.16/near/183580578" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/design.20meeting.202019.2E12.2E16.html#183580578">(Dec 16 2019 at 19:18)</a>:</h4>
<p>to be honest I don't <em>entirely</em> remember, maybe we'll uncover the reason</p>



<a name="183580605"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/design%20meeting%202019.12.16/near/183580605" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/design.20meeting.202019.2E12.2E16.html#183580605">(Dec 16 2019 at 19:18)</a>:</h4>
<p>the idea is that when you have to unify a projection type like <code>&lt;T as Iterator&gt;::Item</code> with some other type <code>X</code>,</p>



<a name="183580644"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/design%20meeting%202019.12.16/near/183580644" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/design.20meeting.202019.2E12.2E16.html#183580644">(Dec 16 2019 at 19:19)</a>:</h4>
<p>you convert that into a goal to be solved, written <code>ProjectionEq(&lt;T as Iterator&gt;::Item = X)</code></p>



<a name="183580652"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/design%20meeting%202019.12.16/near/183580652" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/design.20meeting.202019.2E12.2E16.html#183580652">(Dec 16 2019 at 19:19)</a>:</h4>
<p>there are exactly two rules by which we can solve such a goal</p>



<a name="183580661"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/design%20meeting%202019.12.16/near/183580661" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/design.20meeting.202019.2E12.2E16.html#183580661">(Dec 16 2019 at 19:19)</a>:</h4>
<p>(both of them created from lowering the <code>trait Iterator</code> definition)</p>



<a name="183580687"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/design%20meeting%202019.12.16/near/183580687" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/design.20meeting.202019.2E12.2E16.html#183580687">(Dec 16 2019 at 19:19)</a>:</h4>
<div class="codehilite"><pre><span></span>forall&lt;A, B&gt; {
  ProjectionEq(&lt;A as Iterator&gt;::Item = B) :- Normalize(&lt;A as Iterator&gt;::Item -&gt; B)
}
</pre></div>



<a name="183580693"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/design%20meeting%202019.12.16/near/183580693" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> Jack Huey <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/design.20meeting.202019.2E12.2E16.html#183580693">(Dec 16 2019 at 19:19)</a>:</h4>
<p><code>ProjectionEq</code> clauses are generated for <em>trait</em> and <code>Normalize</code> clauses are generated for the <em>impls</em></p>



<a name="183580703"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/design%20meeting%202019.12.16/near/183580703" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/design.20meeting.202019.2E12.2E16.html#183580703">(Dec 16 2019 at 19:19)</a>:</h4>
<p>and</p>



<a name="183580763"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/design%20meeting%202019.12.16/near/183580763" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/design.20meeting.202019.2E12.2E16.html#183580763">(Dec 16 2019 at 19:20)</a>:</h4>
<div class="codehilite"><pre><span></span>forall&lt;A, B&gt; {
    ProjectionEq(&lt;A as Iterator&gt;::Item = (Iterator::Item)&lt;A&gt;)
}
</pre></div>



<a name="183580786"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/design%20meeting%202019.12.16/near/183580786" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/design.20meeting.202019.2E12.2E16.html#183580786">(Dec 16 2019 at 19:20)</a>:</h4>
<p>this last one makes use of the concept of a "projection placeholder", which I denoted here as <code>(Iterator::Item)&lt;A&gt;</code></p>



<a name="183580810"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/design%20meeting%202019.12.16/near/183580810" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/design.20meeting.202019.2E12.2E16.html#183580810">(Dec 16 2019 at 19:20)</a>:</h4>
<p>the idea is that sometimes you know that there is <em>some</em> <code>Item</code> (say) of an iterator, but you don't know what it is</p>



<a name="183580834"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/design%20meeting%202019.12.16/near/183580834" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/design.20meeting.202019.2E12.2E16.html#183580834">(Dec 16 2019 at 19:21)</a>:</h4>
<p>so e.g. in a case like <code>fn foo&lt;T: Iterator&gt;() { .. }</code></p>



<a name="183580850"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/design%20meeting%202019.12.16/near/183580850" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/design.20meeting.202019.2E12.2E16.html#183580850">(Dec 16 2019 at 19:21)</a>:</h4>
<p>if you ask "what is <code>T::Item</code>? the answer is just ... <code>T::Item</code></p>



<a name="183580853"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/design%20meeting%202019.12.16/near/183580853" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/design.20meeting.202019.2E12.2E16.html#183580853">(Dec 16 2019 at 19:21)</a>:</h4>
<p>we can't say anything more specific than that</p>



<a name="183580882"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/design%20meeting%202019.12.16/near/183580882" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/design.20meeting.202019.2E12.2E16.html#183580882">(Dec 16 2019 at 19:21)</a>:</h4>
<p>so yeah the two rules break down into:</p>
<ul>
<li>we can <em>normalize</em> by finding some applicable <code>impl</code> that tells us what the <code>Item</code> is</li>
<li>we can treat the associated item abstractly, using a placeholder</li>
</ul>



<a name="183580902"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/design%20meeting%202019.12.16/near/183580902" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/design.20meeting.202019.2E12.2E16.html#183580902">(Dec 16 2019 at 19:22)</a>:</h4>
<p>one challenge here is that the second rule <em>always</em> applies, even when we have a normalization</p>



<a name="183580963"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/design%20meeting%202019.12.16/near/183580963" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/design.20meeting.202019.2E12.2E16.html#183580963">(Dec 16 2019 at 19:22)</a>:</h4>
<p>that is partly a "consequence" of using a relatively simple logic</p>



<a name="183580976"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/design%20meeting%202019.12.16/near/183580976" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/design.20meeting.202019.2E12.2E16.html#183580976">(Dec 16 2019 at 19:22)</a>:</h4>
<p>i.e., we can say things that are true, but we can't give "preferences" between them</p>



<a name="183581273"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/design%20meeting%202019.12.16/near/183581273" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/design.20meeting.202019.2E12.2E16.html#183581273">(Dec 16 2019 at 19:22)</a>:</h4>
<p>and it's kind of .. complicated to decide when the normalization is better</p>



<a name="183581334"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/design%20meeting%202019.12.16/near/183581334" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> Jack Huey <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/design.20meeting.202019.2E12.2E16.html#183581334">(Dec 16 2019 at 19:23)</a>:</h4>
<p>I sort of brought this up in the doc, but we could only generate the placeholder type if there are no impls</p>



<a name="183581342"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/design%20meeting%202019.12.16/near/183581342" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/design.20meeting.202019.2E12.2E16.html#183581342">(Dec 16 2019 at 19:23)</a>:</h4>
<p>well..</p>



<a name="183581344"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/design%20meeting%202019.12.16/near/183581344" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/design.20meeting.202019.2E12.2E16.html#183581344">(Dec 16 2019 at 19:23)</a>:</h4>
<p>but how do you decide if there are no impls? it's not always clear</p>



<a name="183581347"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/design%20meeting%202019.12.16/near/183581347" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/design.20meeting.202019.2E12.2E16.html#183581347">(Dec 16 2019 at 19:23)</a>:</h4>
<p>e.g., consider</p>



<a name="183581412"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/design%20meeting%202019.12.16/near/183581412" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> Jack Huey <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/design.20meeting.202019.2E12.2E16.html#183581412">(Dec 16 2019 at 19:24)</a>:</h4>
<p>that conflicts with well-formed goals too</p>



<a name="183581426"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/design%20meeting%202019.12.16/near/183581426" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/design.20meeting.202019.2E12.2E16.html#183581426">(Dec 16 2019 at 19:24)</a>:</h4>
<div class="codehilite"><pre><span></span><span class="n">ProjectionEq</span><span class="p">(</span><span class="o">&lt;</span><span class="kt">i32</span><span class="w"> </span><span class="k">as</span><span class="w"> </span><span class="n">Foo</span><span class="o">&lt;?</span><span class="n">U</span><span class="o">&gt;&gt;</span>::<span class="n">Bar</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">V</span><span class="p">)</span><span class="w"></span>
</pre></div>



<a name="183581444"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/design%20meeting%202019.12.16/near/183581444" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/design.20meeting.202019.2E12.2E16.html#183581444">(Dec 16 2019 at 19:24)</a>:</h4>
<p>now maybe we have an impl <code>impl Foo&lt;u32&gt; for i32</code></p>



<a name="183581454"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/design%20meeting%202019.12.16/near/183581454" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/design.20meeting.202019.2E12.2E16.html#183581454">(Dec 16 2019 at 19:24)</a>:</h4>
<p>that applies, but it's not <em>required</em> that <code>?U = u32</code></p>



<a name="183581483"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/design%20meeting%202019.12.16/near/183581483" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/design.20meeting.202019.2E12.2E16.html#183581483">(Dec 16 2019 at 19:25)</a>:</h4>
<p>there could also be impls (that we can't see, maybe provided by downstream crates) that do <code>impl Foo&lt;SomeOtherType&gt; for i32</code></p>



<a name="183581532"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/design%20meeting%202019.12.16/near/183581532" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/design.20meeting.202019.2E12.2E16.html#183581532">(Dec 16 2019 at 19:25)</a>:</h4>
<p>there are other problems too</p>



<a name="183581540"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/design%20meeting%202019.12.16/near/183581540" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/design.20meeting.202019.2E12.2E16.html#183581540">(Dec 16 2019 at 19:25)</a>:</h4>
<p>e.g., I debated something like</p>



<a name="183581624"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/design%20meeting%202019.12.16/near/183581624" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/design.20meeting.202019.2E12.2E16.html#183581624">(Dec 16 2019 at 19:26)</a>:</h4>
<div class="codehilite"><pre><span></span>ProjectionEq(&lt;T as Iterator&gt;::Item = (Iterator::Item)&lt;T&gt;) :-
    not { exists&lt;X&gt; { Normalize(&lt;T as Iterator&gt;::Item -&gt; X) } }
</pre></div>



<a name="183581634"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/design%20meeting%202019.12.16/near/183581634" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/design.20meeting.202019.2E12.2E16.html#183581634">(Dec 16 2019 at 19:26)</a>:</h4>
<p>I think this is one way to try to capture the intution you were giving</p>



<a name="183581638"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/design%20meeting%202019.12.16/near/183581638" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/design.20meeting.202019.2E12.2E16.html#183581638">(Dec 16 2019 at 19:26)</a>:</h4>
<p>i.e., you can use the placeholder, but only if we can't normalize</p>



<a name="183581673"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/design%20meeting%202019.12.16/near/183581673" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/design.20meeting.202019.2E12.2E16.html#183581673">(Dec 16 2019 at 19:27)</a>:</h4>
<p>but one tricky part about that is -- sometimes normalizing <code>T::Item</code> might have a cyclic requirement to test whether <code>T::Item</code> is equal to something</p>



<a name="183581708"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/design%20meeting%202019.12.16/near/183581708" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/design.20meeting.202019.2E12.2E16.html#183581708">(Dec 16 2019 at 19:27)</a>:</h4>
<p>this might work out, I guess it's worth spelling out some examples, but it could also lead to negative cycles</p>



<a name="183581790"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/design%20meeting%202019.12.16/near/183581790" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/design.20meeting.202019.2E12.2E16.html#183581790">(Dec 16 2019 at 19:28)</a>:</h4>
<p>(which wouldn't be the end of the world, I actually think they have a ton in common with the mechanisms we are building for coinduction, and we may already have that problem thanks to specialization, as I realized recently)</p>



<a name="183581809"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/design%20meeting%202019.12.16/near/183581809" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/design.20meeting.202019.2E12.2E16.html#183581809">(Dec 16 2019 at 19:28)</a>:</h4>
<p>(Does this all make sense so far?)</p>



<a name="183582111"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/design%20meeting%202019.12.16/near/183582111" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/design.20meeting.202019.2E12.2E16.html#183582111">(Dec 16 2019 at 19:31)</a>:</h4>
<p>I think overall what might be good here is to do a bit more experimentation</p>



<a name="183582195"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/design%20meeting%202019.12.16/near/183582195" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/design.20meeting.202019.2E12.2E16.html#183582195">(Dec 16 2019 at 19:32)</a>:</h4>
<p>Like, I'd like to start expanding this document by trying some of the alternative strategies</p>



<a name="183582203"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/design%20meeting%202019.12.16/near/183582203" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/design.20meeting.202019.2E12.2E16.html#183582203">(Dec 16 2019 at 19:32)</a>:</h4>
<p>and (using rust-analyzer, or whatever means) seeing what happens</p>



<a name="183582215"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/design%20meeting%202019.12.16/near/183582215" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/design.20meeting.202019.2E12.2E16.html#183582215">(Dec 16 2019 at 19:32)</a>:</h4>
<p>I think stepping back it's worth saying what's <em>wrong</em> with current design, I see two problems</p>



<a name="183582219"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/design%20meeting%202019.12.16/near/183582219" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/design.20meeting.202019.2E12.2E16.html#183582219">(Dec 16 2019 at 19:32)</a>:</h4>
<ul>
<li>you get non-unique answers sometimes</li>
</ul>



<a name="183582226"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/design%20meeting%202019.12.16/near/183582226" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/design.20meeting.202019.2E12.2E16.html#183582226">(Dec 16 2019 at 19:33)</a>:</h4>
<ul>
<li>it will do more work than is needed</li>
</ul>



<a name="183582251"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/design%20meeting%202019.12.16/near/183582251" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/design.20meeting.202019.2E12.2E16.html#183582251">(Dec 16 2019 at 19:33)</a>:</h4>
<p>in particular, in some cases, it will try to solve problems both with the normalized and placeholder form</p>



<a name="183582255"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/design%20meeting%202019.12.16/near/183582255" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/design.20meeting.202019.2E12.2E16.html#183582255">(Dec 16 2019 at 19:33)</a>:</h4>
<p>and that can be silly</p>



<a name="183582285"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/design%20meeting%202019.12.16/near/183582285" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/design.20meeting.202019.2E12.2E16.html#183582285">(Dec 16 2019 at 19:33)</a>:</h4>
<p>however, if we could solve the first one, we might find the second one is not such a big problem -- and we might be able to attack it in practice quite a bit</p>



<a name="183582292"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/design%20meeting%202019.12.16/near/183582292" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> Jack Huey <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/design.20meeting.202019.2E12.2E16.html#183582292">(Dec 16 2019 at 19:33)</a>:</h4>
<p>The experimenting that I've done with my branches have gotten me <em>close</em></p>



<a name="183582299"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/design%20meeting%202019.12.16/near/183582299" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/design.20meeting.202019.2E12.2E16.html#183582299">(Dec 16 2019 at 19:33)</a>:</h4>
<p>e.g. maybe by eschewing the placeholder in the easy cases</p>



<a name="183582357"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/design%20meeting%202019.12.16/near/183582357" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> Florian Diebold <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/design.20meeting.202019.2E12.2E16.html#183582357">(Dec 16 2019 at 19:34)</a>:</h4>
<p>I'd be happy to try out alternative strategies with rust-analyzer btw, I think this problem is responsible for quite a few of the remaining cases where we can't infer types currently</p>



<a name="183582362"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/design%20meeting%202019.12.16/near/183582362" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/design.20meeting.202019.2E12.2E16.html#183582362">(Dec 16 2019 at 19:34)</a>:</h4>
<p>(one nice thing about the current setup is that it is conceptually fairly simple)</p>



<a name="183582363"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/design%20meeting%202019.12.16/near/183582363" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/design.20meeting.202019.2E12.2E16.html#183582363">(Dec 16 2019 at 19:34)</a>:</h4>
<blockquote>
<p>The experimenting that I've done with my branches have gotten me <em>close</em></p>
</blockquote>
<p>say a bit more</p>



<a name="183582381"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/design%20meeting%202019.12.16/near/183582381" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> Jack Huey <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/design.20meeting.202019.2E12.2E16.html#183582381">(Dec 16 2019 at 19:34)</a>:</h4>
<p>Let me try to put thoughts together</p>



<a name="183582401"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/design%20meeting%202019.12.16/near/183582401" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> Jack Huey <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/design.20meeting.202019.2E12.2E16.html#183582401">(Dec 16 2019 at 19:35)</a>:</h4>
<p>So, some things that I've been experimenting with locally:</p>



<a name="183582459"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/design%20meeting%202019.12.16/near/183582459" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> Jack Huey <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/design.20meeting.202019.2E12.2E16.html#183582459">(Dec 16 2019 at 19:35)</a>:</h4>
<p>Mentioned this last week a bit, but I think the big thing that my branch does is maintain a sense of "projection"</p>



<a name="183582510"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/design%20meeting%202019.12.16/near/183582510" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> Jack Huey <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/design.20meeting.202019.2E12.2E16.html#183582510">(Dec 16 2019 at 19:36)</a>:</h4>
<p>so, for the test in <a href="https://github.com/rust-lang/rust/issues/234" target="_blank" title="https://github.com/rust-lang/rust/issues/234">#234</a></p>



<a name="183582546"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/design%20meeting%202019.12.16/near/183582546" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> Jack Huey <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/design.20meeting.202019.2E12.2E16.html#183582546">(Dec 16 2019 at 19:36)</a>:</h4>
<p>The answer is not just <code>u32</code>, it's <code>(Trait1::Type)&lt;S&gt; as u32</code></p>



<a name="183582563"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/design%20meeting%202019.12.16/near/183582563" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> Jack Huey <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/design.20meeting.202019.2E12.2E16.html#183582563">(Dec 16 2019 at 19:36)</a>:</h4>
<p>where the latter means "that projection normalized to <code>u32</code>"</p>



<a name="183582621"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/design%20meeting%202019.12.16/near/183582621" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/design.20meeting.202019.2E12.2E16.html#183582621">(Dec 16 2019 at 19:37)</a>:</h4>
<p>oh, right</p>



<a name="183582677"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/design%20meeting%202019.12.16/near/183582677" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> Jack Huey <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/design.20meeting.202019.2E12.2E16.html#183582677">(Dec 16 2019 at 19:38)</a>:</h4>
<p>I've also experimented with removing <code>Normalize</code> and <code>ProjectionEq</code>, which I think is fine. Since really <code>Normalize</code> is only a layer of indirection from <code>ProjectionEq</code> (except for the placeholder, but if we don't use the placeholder, it doesn't serve much use)</p>



<a name="183582678"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/design%20meeting%202019.12.16/near/183582678" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/design.20meeting.202019.2E12.2E16.html#183582678">(Dec 16 2019 at 19:38)</a>:</h4>
<p>yeah, I'm not sure what I think about this approach, as I said earlier :)</p>



<a name="183582687"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/design%20meeting%202019.12.16/near/183582687" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> Jack Huey <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/design.20meeting.202019.2E12.2E16.html#183582687">(Dec 16 2019 at 19:38)</a>:</h4>
<p>right</p>



<a name="183582705"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/design%20meeting%202019.12.16/near/183582705" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/design.20meeting.202019.2E12.2E16.html#183582705">(Dec 16 2019 at 19:38)</a>:</h4>
<p>I don't see much benefit to removing normalize/projection-eq, but also little harm</p>



<a name="183582712"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/design%20meeting%202019.12.16/near/183582712" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/design.20meeting.202019.2E12.2E16.html#183582712">(Dec 16 2019 at 19:38)</a>:</h4>
<p>I can see it being useful sometimes</p>



<a name="183582723"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/design%20meeting%202019.12.16/near/183582723" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/design.20meeting.202019.2E12.2E16.html#183582723">(Dec 16 2019 at 19:38)</a>:</h4>
<p>to be able to say you just want <code>Normalize</code></p>



<a name="183582729"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/design%20meeting%202019.12.16/near/183582729" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/design.20meeting.202019.2E12.2E16.html#183582729">(Dec 16 2019 at 19:38)</a>:</h4>
<p>i.e., in the monomorphiation phase of the compiler</p>



<a name="183582736"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/design%20meeting%202019.12.16/near/183582736" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/design.20meeting.202019.2E12.2E16.html#183582736">(Dec 16 2019 at 19:38)</a>:</h4>
<p>we want to get the types from impls only</p>



<a name="183582780"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/design%20meeting%202019.12.16/near/183582780" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> Jack Huey <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/design.20meeting.202019.2E12.2E16.html#183582780">(Dec 16 2019 at 19:39)</a>:</h4>
<p>I don't think I've tried to test the former changes without removing <code>Normalize</code> yet</p>



<a name="183582802"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/design%20meeting%202019.12.16/near/183582802" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> Jack Huey <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/design.20meeting.202019.2E12.2E16.html#183582802">(Dec 16 2019 at 19:39)</a>:</h4>
<p>I guess one design question to think about is what is the "correct" answer for the "With inference variables" case from the Hackmd doc</p>



<a name="183582914"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/design%20meeting%202019.12.16/near/183582914" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> Jack Huey <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/design.20meeting.202019.2E12.2E16.html#183582914">(Dec 16 2019 at 19:40)</a>:</h4>
<p>Would we rather have "ambiguous" or <code>?0 = ^0, ?1 = &lt;?0 as Trait1&gt;::Type</code></p>



<a name="183582952"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/design%20meeting%202019.12.16/near/183582952" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/design.20meeting.202019.2E12.2E16.html#183582952">(Dec 16 2019 at 19:40)</a>:</h4>
<p>Yeah, so,</p>



<a name="183582958"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/design%20meeting%202019.12.16/near/183582958" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/design.20meeting.202019.2E12.2E16.html#183582958">(Dec 16 2019 at 19:40)</a>:</h4>
<p>this is a good consideration too</p>



<a name="183582961"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/design%20meeting%202019.12.16/near/183582961" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> Jack Huey <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/design.20meeting.202019.2E12.2E16.html#183582961">(Dec 16 2019 at 19:41)</a>:</h4>
<p>(or I guess a third answer could be <code>?0 = ^0, ?1 = ?2</code></p>



<a name="183582976"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/design%20meeting%202019.12.16/near/183582976" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/design.20meeting.202019.2E12.2E16.html#183582976">(Dec 16 2019 at 19:41)</a>:</h4>
<p>I have to check the compiler's current behavior but</p>



<a name="183582987"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/design%20meeting%202019.12.16/near/183582987" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/design.20meeting.202019.2E12.2E16.html#183582987">(Dec 16 2019 at 19:41)</a>:</h4>
<p>it definitely guesses <em>sometimes</em></p>



<a name="183583011"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/design%20meeting%202019.12.16/near/183583011" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/design.20meeting.202019.2E12.2E16.html#183583011">(Dec 16 2019 at 19:41)</a>:</h4>
<p>but what it does not presently do</p>



<a name="183583017"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/design%20meeting%202019.12.16/near/183583017" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/design.20meeting.202019.2E12.2E16.html#183583017">(Dec 16 2019 at 19:41)</a>:</h4>
<p>though chalk could do it</p>



<a name="183583052"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/design%20meeting%202019.12.16/near/183583052" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/design.20meeting.202019.2E12.2E16.html#183583052">(Dec 16 2019 at 19:41)</a>:</h4>
<p>is to handle cases like <code>ProjectionEq(&lt;A as Foo&lt;?B&gt;&gt;::Bar = i32)</code></p>



<a name="183583058"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/design%20meeting%202019.12.16/near/183583058" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/design.20meeting.202019.2E12.2E16.html#183583058">(Dec 16 2019 at 19:41)</a>:</h4>
<p>i.e., maybe knowing the target type</p>



<a name="183583065"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/design%20meeting%202019.12.16/near/183583065" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/design.20meeting.202019.2E12.2E16.html#183583065">(Dec 16 2019 at 19:41)</a>:</h4>
<p>would allow us to infer <code>?B</code></p>



<a name="183583069"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/design%20meeting%202019.12.16/near/183583069" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/design.20meeting.202019.2E12.2E16.html#183583069">(Dec 16 2019 at 19:41)</a>:</h4>
<p>where you couldn't otherwise</p>



<a name="183583126"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/design%20meeting%202019.12.16/near/183583126" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/design.20meeting.202019.2E12.2E16.html#183583126">(Dec 16 2019 at 19:42)</a>:</h4>
<p>chalk doesn't draw any distinction between the 'role' of the type</p>



<a name="183583129"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/design%20meeting%202019.12.16/near/183583129" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/design.20meeting.202019.2E12.2E16.html#183583129">(Dec 16 2019 at 19:42)</a>:</h4>
<p>but the compiler today does</p>



<a name="183583141"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/design%20meeting%202019.12.16/near/183583141" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/design.20meeting.202019.2E12.2E16.html#183583141">(Dec 16 2019 at 19:42)</a>:</h4>
<p>I guess that's a separate question</p>



<a name="183583174"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/design%20meeting%202019.12.16/near/183583174" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> Jack Huey <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/design.20meeting.202019.2E12.2E16.html#183583174">(Dec 16 2019 at 19:42)</a>:</h4>
<p>Can you rephrase that?</p>



<a name="183583186"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/design%20meeting%202019.12.16/near/183583186" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/design.20meeting.202019.2E12.2E16.html#183583186">(Dec 16 2019 at 19:43)</a>:</h4>
<blockquote>
<p>Would we rather have "ambiguous" or <code>?0 = ^0, ?1 = &lt;?0 as Trait1&gt;::Type</code></p>
</blockquote>
<p>as far as <em>this</em> inference goes, I don't see this result as being all that useful (i.e., knowing that it's the projection of something, but not what)</p>



<a name="183583196"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/design%20meeting%202019.12.16/near/183583196" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/design.20meeting.202019.2E12.2E16.html#183583196">(Dec 16 2019 at 19:43)</a>:</h4>
<p>let me try to write out an example</p>



<a name="183583369"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/design%20meeting%202019.12.16/near/183583369" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/design.20meeting.202019.2E12.2E16.html#183583369">(Dec 16 2019 at 19:45)</a>:</h4>
<div class="codehilite"><pre><span></span><span class="k">trait</span><span class="w"> </span><span class="n">Id</span><span class="w"> </span><span class="p">{</span><span class="w"> </span><span class="k">type</span> <span class="nc">Output</span><span class="p">;</span><span class="w"> </span><span class="p">}</span><span class="w"></span>

<span class="k">impl</span><span class="w"> </span><span class="n">Id</span><span class="w"> </span><span class="k">for</span><span class="w"> </span><span class="kt">i32</span><span class="w"> </span><span class="p">{</span><span class="w"></span>
<span class="w">    </span><span class="k">type</span> <span class="nc">Output</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="kt">i32</span><span class="p">;</span><span class="w"></span>
<span class="p">}</span><span class="w"></span>

<span class="k">impl</span><span class="w"> </span><span class="n">Id</span><span class="w"> </span><span class="k">for</span><span class="w"> </span><span class="kt">u32</span><span class="w"> </span><span class="p">{</span><span class="w"></span>
<span class="w">    </span><span class="k">type</span> <span class="nc">Output</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="kt">u32</span><span class="p">;</span><span class="w"></span>
<span class="p">}</span><span class="w"></span>
</pre></div>



<a name="183583379"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/design%20meeting%202019.12.16/near/183583379" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/design.20meeting.202019.2E12.2E16.html#183583379">(Dec 16 2019 at 19:45)</a>:</h4>
<p>Given <code>ProjectionEq(&lt;?X as Id&gt;::Output = i32)</code>, can we infer that <code>?X = i32</code>?</p>



<a name="183583402"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/design%20meeting%202019.12.16/near/183583402" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/design.20meeting.202019.2E12.2E16.html#183583402">(Dec 16 2019 at 19:46)</a>:</h4>
<p>The compiler today cannot</p>



<a name="183583454"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/design%20meeting%202019.12.16/near/183583454" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/design.20meeting.202019.2E12.2E16.html#183583454">(Dec 16 2019 at 19:46)</a>:</h4>
<p>In part because it doesn't use this strategy for handling associated types</p>



<a name="183583477"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/design%20meeting%202019.12.16/near/183583477" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/design.20meeting.202019.2E12.2E16.html#183583477">(Dec 16 2019 at 19:46)</a>:</h4>
<p>It uses a 'normalization' strategy where you just say "for a given projection, what is its normalized form?"</p>



<a name="183583483"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/design%20meeting%202019.12.16/near/183583483" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/design.20meeting.202019.2E12.2E16.html#183583483">(Dec 16 2019 at 19:46)</a>:</h4>
<p>so it only has <code>&lt;?X as Id&gt;::Output</code> at hand</p>



<a name="183583509"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/design%20meeting%202019.12.16/near/183583509" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/design.20meeting.202019.2E12.2E16.html#183583509">(Dec 16 2019 at 19:46)</a>:</h4>
<p>it doesn't know what you <em>want</em> to be equal to</p>



<a name="183583557"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/design%20meeting%202019.12.16/near/183583557" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> Jack Huey <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/design.20meeting.202019.2E12.2E16.html#183583557">(Dec 16 2019 at 19:47)</a>:</h4>
<p>Hmm</p>



<a name="183583559"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/design%20meeting%202019.12.16/near/183583559" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/design.20meeting.202019.2E12.2E16.html#183583559">(Dec 16 2019 at 19:47)</a>:</h4>
<p>(from what I understood of "that haskell paper" that I've mentioned, they too took an approach like this, but a different and more iterative one, where they apply normalization strategies repeatedly and in various orders to derive a normalized form for some projection)</p>



<a name="183583615"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/design%20meeting%202019.12.16/near/183583615" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/design.20meeting.202019.2E12.2E16.html#183583615">(Dec 16 2019 at 19:47)</a>:</h4>
<blockquote>
<p>it doesn't know what you <em>want</em> to be equal to</p>
</blockquote>
<p>however, people have sometimes requested this sort of inference.</p>



<a name="183583679"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/design%20meeting%202019.12.16/near/183583679" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/design.20meeting.202019.2E12.2E16.html#183583679">(Dec 16 2019 at 19:48)</a>:</h4>
<p>(otoh, every time we get smarter, we also make it so that people are more likely to rely on some random pattern that existing impls happen to exhibit)</p>



<a name="183583682"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/design%20meeting%202019.12.16/near/183583682" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/design.20meeting.202019.2E12.2E16.html#183583682">(Dec 16 2019 at 19:48)</a>:</h4>
<p>we could however</p>



<a name="183583692"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/design%20meeting%202019.12.16/near/183583692" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/design.20meeting.202019.2E12.2E16.html#183583692">(Dec 16 2019 at 19:48)</a>:</h4>
<p>easily encode some of these st.. well, easily? maybe easily</p>



<a name="183583714"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/design%20meeting%202019.12.16/near/183583714" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/design.20meeting.202019.2E12.2E16.html#183583714">(Dec 16 2019 at 19:48)</a>:</h4>
<p>I was going to say "easily encode some of these strategies" but I'm not sure how true that is</p>



<a name="183583751"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/design%20meeting%202019.12.16/near/183583751" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/design.20meeting.202019.2E12.2E16.html#183583751">(Dec 16 2019 at 19:49)</a>:</h4>
<p>I guess we could <em>force</em> ourselves to never take the output type into account if we wanted</p>



<a name="183583759"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/design%20meeting%202019.12.16/near/183583759" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/design.20meeting.202019.2E12.2E16.html#183583759">(Dec 16 2019 at 19:49)</a>:</h4>
<p>by tweaking how we canonicalize the goals in such a case</p>



<a name="183583770"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/design%20meeting%202019.12.16/near/183583770" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/design.20meeting.202019.2E12.2E16.html#183583770">(Dec 16 2019 at 19:49)</a>:</h4>
<p>i.e., kind of like truncation, we could <em>force</em> an inference variable</p>



<a name="183583824"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/design%20meeting%202019.12.16/near/183583824" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/design.20meeting.202019.2E12.2E16.html#183583824">(Dec 16 2019 at 19:50)</a>:</h4>
<p>hmm no that wouldn't work :)</p>



<a name="183583838"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/design%20meeting%202019.12.16/near/183583838" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/design.20meeting.202019.2E12.2E16.html#183583838">(Dec 16 2019 at 19:50)</a>:</h4>
<p>anyway, I think this is <em>maybe</em> a secondary consideration.</p>



<a name="183583851"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/design%20meeting%202019.12.16/near/183583851" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/design.20meeting.202019.2E12.2E16.html#183583851">(Dec 16 2019 at 19:50)</a>:</h4>
<blockquote>
<p>It uses a 'normalization' strategy where you just say "for a given projection, what is its normalized form?"</p>
</blockquote>
<p>what I don't like about this (contra the chalk strategy) is that it's a new fundamental thing</p>



<a name="183583859"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/design%20meeting%202019.12.16/near/183583859" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/design.20meeting.202019.2E12.2E16.html#183583859">(Dec 16 2019 at 19:50)</a>:</h4>
<p>i.e., it's a "function" or something</p>



<a name="183583863"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/design%20meeting%202019.12.16/near/183583863" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/design.20meeting.202019.2E12.2E16.html#183583863">(Dec 16 2019 at 19:51)</a>:</h4>
<p>it also makes cycles harder to reason about</p>



<a name="183583897"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/design%20meeting%202019.12.16/near/183583897" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/design.20meeting.202019.2E12.2E16.html#183583897">(Dec 16 2019 at 19:51)</a>:</h4>
<p>so we're 51 minutes in</p>



<a name="183583907"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/design%20meeting%202019.12.16/near/183583907" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> Jack Huey <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/design.20meeting.202019.2E12.2E16.html#183583907">(Dec 16 2019 at 19:51)</a>:</h4>
<p>right</p>



<a name="183583914"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/design%20meeting%202019.12.16/near/183583914" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/design.20meeting.202019.2E12.2E16.html#183583914">(Dec 16 2019 at 19:51)</a>:</h4>
<p>I doubt we'll reach a final answer :)</p>



<a name="183583919"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/design%20meeting%202019.12.16/near/183583919" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> Jack Huey <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/design.20meeting.202019.2E12.2E16.html#183583919">(Dec 16 2019 at 19:52)</a>:</h4>
<p>so, this is a difficult problem :)</p>



<a name="183583970"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/design%20meeting%202019.12.16/near/183583970" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/design.20meeting.202019.2E12.2E16.html#183583970">(Dec 16 2019 at 19:52)</a>:</h4>
<p>one thing I wanted to mention: I've been working on some branches of chalk, one of which is trying to make this change:</p>
<blockquote>
<ul>
<li><strong>Remove unnormalized types</strong>. This is somewhat of a stepping stone. The idea here is to "desugar" projection types into explicit goals when lowering, so there is no longer "unnormalized projections", only normalized projections and placeholder types. [source 2]</li>
</ul>
</blockquote>



<a name="183583973"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/design%20meeting%202019.12.16/near/183583973" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> Jack Huey <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/design.20meeting.202019.2E12.2E16.html#183583973">(Dec 16 2019 at 19:52)</a>:</h4>
<p>Is there <em>something</em> we're sure about?</p>



<a name="183583997"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/design%20meeting%202019.12.16/near/183583997" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/design.20meeting.202019.2E12.2E16.html#183583997">(Dec 16 2019 at 19:52)</a>:</h4>
<p>which doesn't really change anything fundamental</p>



<a name="183584002"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/design%20meeting%202019.12.16/near/183584002" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/design.20meeting.202019.2E12.2E16.html#183584002">(Dec 16 2019 at 19:52)</a>:</h4>
<p>or really anything at all :)</p>



<a name="183584009"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/design%20meeting%202019.12.16/near/183584009" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> Jack Huey <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/design.20meeting.202019.2E12.2E16.html#183584009">(Dec 16 2019 at 19:52)</a>:</h4>
<p>Which branch is that?</p>



<a name="183584028"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/design%20meeting%202019.12.16/near/183584028" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/design.20meeting.202019.2E12.2E16.html#183584028">(Dec 16 2019 at 19:52)</a>:</h4>
<p>it's called "placeholder"</p>



<a name="183584037"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/design%20meeting%202019.12.16/near/183584037" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/design.20meeting.202019.2E12.2E16.html#183584037">(Dec 16 2019 at 19:53)</a>:</h4>
<p>my motivations are rather different</p>



<a name="183584070"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/design%20meeting%202019.12.16/near/183584070" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/design.20meeting.202019.2E12.2E16.html#183584070">(Dec 16 2019 at 19:53)</a>:</h4>
<p>I want to explore an alternative idea for region ifnerence, which requires that I be able to distinguish syntactic from semantic equality,</p>



<a name="183584107"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/design%20meeting%202019.12.16/near/183584107" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/design.20meeting.202019.2E12.2E16.html#183584107">(Dec 16 2019 at 19:53)</a>:</h4>
<p>I also want to solve the problem that we should not request impls with a self type that is some "unnormalized projection"</p>



<a name="183584199"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/design%20meeting%202019.12.16/near/183584199" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/design.20meeting.202019.2E12.2E16.html#183584199">(Dec 16 2019 at 19:54)</a>:</h4>
<p>I am also kind of cleaning up <code>TyData</code> a bit in that branch, which is what had me thinking about documenting the desired "end state"  for how types look</p>



<a name="183584251"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/design%20meeting%202019.12.16/near/183584251" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> Jack Huey <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/design.20meeting.202019.2E12.2E16.html#183584251">(Dec 16 2019 at 19:54)</a>:</h4>
<p>maybe I should take a look at your PR</p>



<a name="183584285"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/design%20meeting%202019.12.16/near/183584285" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> Jack Huey <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/design.20meeting.202019.2E12.2E16.html#183584285">(Dec 16 2019 at 19:55)</a>:</h4>
<p>I just don't know a ton about the direction for the recent TypeFamily and related changes</p>



<a name="183584302"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/design%20meeting%202019.12.16/near/183584302" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/design.20meeting.202019.2E12.2E16.html#183584302">(Dec 16 2019 at 19:55)</a>:</h4>
<blockquote>
<p>Is there <em>something</em> we're sure about?</p>
</blockquote>
<p>I guess I still kind of feel like I'd like to push a bit harder on the current approach, and in particular I'm curious if we can improve the "aggregator" here to discard some of the duplicates; I guess I should look more at your branch, I remain sort of skeptical about having types that mean "this was the result of normalization" -- in part because I think it'll potentially create duplicate work as well, though I should come up with an example (i.e., if we can derive <code>u32</code> both via normalization and maybe some other means? not sure if that's realistic) but just in general because it means that types are carrying a kind of "history" with them, versus just their 'meaning'</p>



<a name="183584328"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/design%20meeting%202019.12.16/near/183584328" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/design.20meeting.202019.2E12.2E16.html#183584328">(Dec 16 2019 at 19:55)</a>:</h4>
<blockquote>
<p>I just don't know a ton about the direction for the recent TypeFamily and related changes</p>
</blockquote>
<p>another reason for me to try and document a full proposal, I guess</p>



<a name="183584427"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/design%20meeting%202019.12.16/near/183584427" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> Jack Huey <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/design.20meeting.202019.2E12.2E16.html#183584427">(Dec 16 2019 at 19:57)</a>:</h4>
<p>yeah, I understand the concern with having the "history" of the type in them</p>



<a name="183584430"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/design%20meeting%202019.12.16/near/183584430" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/design.20meeting.202019.2E12.2E16.html#183584430">(Dec 16 2019 at 19:57)</a>:</h4>
<p>maybe what we can say for sure is that there are a few directions we can explore:</p>



<a name="183584439"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/design%20meeting%202019.12.16/near/183584439" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/design.20meeting.202019.2E12.2E16.html#183584439">(Dec 16 2019 at 19:57)</a>:</h4>
<ul>
<li>"history" types</li>
</ul>



<a name="183584443"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/design%20meeting%202019.12.16/near/183584443" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/design.20meeting.202019.2E12.2E16.html#183584443">(Dec 16 2019 at 19:57)</a>:</h4>
<ul>
<li>improving the deaggregator</li>
</ul>



<a name="183584461"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/design%20meeting%202019.12.16/near/183584461" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/design.20meeting.202019.2E12.2E16.html#183584461">(Dec 16 2019 at 19:57)</a>:</h4>
<ul>
<li>introducing a <code>not</code> so that we only use placeholders when we <em>can't</em> normalize</li>
</ul>



<a name="183584466"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/design%20meeting%202019.12.16/near/183584466" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/design.20meeting.202019.2E12.2E16.html#183584466">(Dec 16 2019 at 19:57)</a>:</h4>
<p>the last one may lead to more floundering</p>



<a name="183584467"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/design%20meeting%202019.12.16/near/183584467" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/design.20meeting.202019.2E12.2E16.html#183584467">(Dec 16 2019 at 19:57)</a>:</h4>
<p>but that might be ok</p>



<a name="183584528"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/design%20meeting%202019.12.16/near/183584528" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/design.20meeting.202019.2E12.2E16.html#183584528">(Dec 16 2019 at 19:58)</a>:</h4>
<p>those all seem pretty "actionable"</p>



<a name="183584554"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/design%20meeting%202019.12.16/near/183584554" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/design.20meeting.202019.2E12.2E16.html#183584554">(Dec 16 2019 at 19:58)</a>:</h4>
<p>(I also plan to do a bit of "reaching out" to some folks who may have suggestions for related work to follow up on)</p>



<a name="183584569"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/design%20meeting%202019.12.16/near/183584569" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> Jack Huey <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/design.20meeting.202019.2E12.2E16.html#183584569">(Dec 16 2019 at 19:58)</a>:</h4>
<p>I think the aggregator/antiunifier could definitely be improved</p>



<a name="183584653"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/design%20meeting%202019.12.16/near/183584653" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> Jack Huey <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/design.20meeting.202019.2E12.2E16.html#183584653">(Dec 16 2019 at 19:59)</a>:</h4>
<p>the <code>not</code> might be the easiest to try</p>



<a name="183584838"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/design%20meeting%202019.12.16/near/183584838" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> Jack Huey <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/design.20meeting.202019.2E12.2E16.html#183584838">(Dec 16 2019 at 20:01)</a>:</h4>
<p>I'll also work a bit on my branch(es) and see if I can get all the tests to pass</p>



<a name="183584840"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/design%20meeting%202019.12.16/near/183584840" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/design.20meeting.202019.2E12.2E16.html#183584840">(Dec 16 2019 at 20:01)</a>:</h4>
<p>I think it is the easiest to try</p>



<a name="183584914"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/design%20meeting%202019.12.16/near/183584914" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> Jack Huey <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/design.20meeting.202019.2E12.2E16.html#183584914">(Dec 16 2019 at 20:02)</a>:</h4>
<p>I think I'm <em>close</em>, but we'll see</p>



<a name="183586477"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/design%20meeting%202019.12.16/near/183586477" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> David Barsky <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/design.20meeting.202019.2E12.2E16.html#183586477">(Dec 16 2019 at 20:21)</a>:</h4>
<p>Hello, sorry for missing this. Is there a Google Calendar (or whatever) that I can subscribe to I can be present for these going forward?</p>



<a name="183586534"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/design%20meeting%202019.12.16/near/183586534" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> Jack Huey <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/design.20meeting.202019.2E12.2E16.html#183586534">(Dec 16 2019 at 20:21)</a>:</h4>
<p>I think there is a calendar invite link in the wg-traits repo</p>



<a name="183586546"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/design%20meeting%202019.12.16/near/183586546" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> Jack Huey <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/design.20meeting.202019.2E12.2E16.html#183586546">(Dec 16 2019 at 20:21)</a>:</h4>
<p>But it's every Monday at 2PM EST</p>



<a name="183586610"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/design%20meeting%202019.12.16/near/183586610" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> Jack Huey <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/design.20meeting.202019.2E12.2E16.html#183586610">(Dec 16 2019 at 20:22)</a>:</h4>
<p><a href="https://calendar.google.com/calendar/r/eventedit/copy/MnFmbmdkaGV0aXE3Zjc4cjlpNWVjNDRoZXMgNnU1cnJ0Y2U2bHJ0djA3cGZpM2RhbWdqdXNAZw/amFja2g3MjZAZ21haWwuY29t?sf=true" target="_blank" title="https://calendar.google.com/calendar/r/eventedit/copy/MnFmbmdkaGV0aXE3Zjc4cjlpNWVjNDRoZXMgNnU1cnJ0Y2U2bHJ0djA3cGZpM2RhbWdqdXNAZw/amFja2g3MjZAZ21haWwuY29t?sf=true">https://calendar.google.com/calendar/r/eventedit/copy/MnFmbmdkaGV0aXE3Zjc4cjlpNWVjNDRoZXMgNnU1cnJ0Y2U2bHJ0djA3cGZpM2RhbWdqdXNAZw/amFja2g3MjZAZ21haWwuY29t?sf=true</a></p>



<a name="183591951"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/design%20meeting%202019.12.16/near/183591951" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> David Barsky <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/design.20meeting.202019.2E12.2E16.html#183591951">(Dec 16 2019 at 21:19)</a>:</h4>
<p>Thanks very much!</p>



<a name="183593356"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/design%20meeting%202019.12.16/near/183593356" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/design.20meeting.202019.2E12.2E16.html#183593356">(Dec 16 2019 at 21:35)</a>:</h4>
<p><span class="user-mention" data-user-id="198819">@David Barsky</span> I can invite you if you like</p>



<a name="183593969"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/design%20meeting%202019.12.16/near/183593969" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> David Barsky <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/design.20meeting.202019.2E12.2E16.html#183593969">(Dec 16 2019 at 21:41)</a>:</h4>
<p><span class="user-mention" data-user-id="116009">@nikomatsakis</span> that'd be handy! You should have my email on file :)</p>



<hr><p>Last updated: Aug 07 2021 at 22:04 UTC</p>
</html>